#ifndef CUBA_H_
#define CUBA_H_

#include "Bloque.h"

namespace Toolkit
{

class Cuba: public Bloque
{

private:

	/**
	 * Indica la cantidad de bits necesarios para ser referenciado por el Directorio.
	 */
	unsigned int profundidad;

public:
	Cuba(const unsigned long int &tamanoBloque, const TipoSerializacion&);

	virtual ~Cuba();

    virtual void serializar(stringstream&) const;
    virtual void hidratar(const stringstream&);

    virtual Componente* nuevaInstancia() const;

    /**
     * Reduce el atributo profundidad en 1 y combina las claves/referencias de dos cubas en una.
     * Devuelve true si se lograron combinar, false en caso contrario.
     */
    bool combinar(Cuba &cuba);

    unsigned int getProfundidad() const;

    void incrementarProfundidad();

    void decrementarProfundidad();
};

}

#endif /* CUBA_H_ */
